#ifndef MAPPER_2_H
#define MAPPER_2_H

#include "mapper.h"

// Mapper2是相对简单的一种
// 它将程序代码块（PRG_ROM）分为16kb+16kb fixed，具体如下：
// ROM中的最低16KB总是被映射到CPU程序内存的高16字节地址
// 而CPU程序内存块的低16字节可以被映射到ROM的其他任何位置
// 为了记录映射的是哪一个块（Bank），Mapper2包含两个寄存器
class Mapper2 : public Mapper
{
public:
    Mapper2(quint8 rom_num, quint8 vrom_num);
    ~Mapper2();

    quint32 cpu_read_addram(quint16 addr) override;
    quint32 cpu_write_addram(quint16 addr, quint8 data) override;
    quint32 cpu_read_prg(quint16 addr) override;
    quint32 cpu_write_prg(quint16 addr, quint8 data) override;

    quint32 ppu_read_pt(quint16 addr) override;
    quint32 ppu_write_pt(quint16 addr, quint8 data) override;

public:
    // For Save/Load game
    void write_to_stream(QDataStream &) override;
    void read_from_stream(QDataStream &) override;

private:
    quint8 prg_select_16kb_lo;
    quint8 prg_select_16kb_hi;
};

#endif // MAPPER_2_H
